| @@ -1,5 +1,3 @@ | ||
| 1 | -require 'open3' | |
| 2 | - | |
| 3 | 1 | module Agents | 
| 4 | 2 | class ShellCommandAgent < Agent | 
| 5 | 3 | default_schedule "never" | 
| @@ -88,23 +86,25 @@ module Agents | ||
| 88 | 86 | end | 
| 89 | 87 |  | 
| 90 | 88 | def run_command(path, command) | 
| 91 | - result = nil | |
| 92 | - errors = nil | |
| 93 | - exit_status = nil | |
| 94 | - | |
| 95 | -      Dir.chdir(path){ | |
| 96 | - begin | |
| 97 | - stdin, stdout, stderr, wait_thr = Open3.popen3(command) | |
| 98 | - exit_status = wait_thr.value.to_i | |
| 99 | - result = stdout.gets(nil) | |
| 100 | - errors = stderr.gets(nil) | |
| 101 | - rescue Exception => e | |
| 102 | - errors = e.to_s | |
| 103 | - end | |
| 104 | - } | |
| 89 | + begin | |
| 90 | + rout, wout = IO.pipe | |
| 91 | + rerr, werr = IO.pipe | |
| 92 | + | |
| 93 | + pid = spawn(command, chdir: path, out: wout, err: werr) | |
| 105 | 94 |  | 
| 106 | - result = result.to_s.strip | |
| 107 | - errors = errors.to_s.strip | |
| 95 | + wout.close | |
| 96 | + werr.close | |
| 97 | + | |
| 98 | + (result = rout.read).strip! | |
| 99 | + (errors = rerr.read).strip! | |
| 100 | + | |
| 101 | + _, status = Process.wait2(pid) | |
| 102 | + exit_status = status.exitstatus | |
| 103 | + rescue Exception => e | |
| 104 | + errors = e.to_s | |
| 105 | + result = ''.freeze | |
| 106 | + exit_status = nil | |
| 107 | + end | |
| 108 | 108 |  | 
| 109 | 109 | [result, errors, exit_status] | 
| 110 | 110 | end |